<?php
class Application_Model_GameProperties extends Xend_Db_Model {
	protected $_dbTableName = 'Application_Model_Table_GameProperties';
	
	public function __construct() {
		parent::__construct();
	}

	/**
	 * speichert einen Datensatz vom Typ Application_Model_Schema_GameProperty
	 * @param object Application_Model_Schema_GameProperty
	 * @return int ID des Datensatzes in der Datenbanktabelle game_properties
	 */
	public function save(Application_Model_Schema_GameProperty $gameProperty) {
		$ret	= null;
		$data = array(
			'users_id'	=> $gameProperty->user->id,
			'modified'	=> $gameProperty->modified
		);

		if($gameProperty->id === null) {
			$ret = $this->getDbTable()->insert($data);

		} else {
			$ret = $this->getDbTable()->update($data, array('id = ?' => $gameProperty->id));
		}

		return (int) $ret;
	}

	/**
	 * fragt einen Eintrag aus Spielstaenden ab
	 * @param array $where Array mit Bedingungen, die an die Datenbank uebergeben werden
	 * @param array $ref Array mit Tabellen, die verknuepft werden sollen
	 * @return array Array mit den Daten, die aus der Datenbank geladen wurden
	 */
	public function find($where = array(), $ref = array()) {
		$gameProperty = null;

		if(is_array($data = $this->findall($where, $ref, array('limit' => 1)))) {
			$gameProperty = current($data);
		}

		return $gameProperty;
	}

	/**
	 * fragt mehrere Spielstaende ab, die auf die eventuell uebergebenen Bedingungen
	 * zutreffen
	 * @param array $where Array mit Bedingungen, die an die Datenbank uebergeben werden
	 * @param array $ref Array mit Tabellen, die verknuepft werden sollen
	 * @return array Array mit den Daten, die aus der Datenbank geladen wurden
	 */
	public function findall($where = array(), $ref = array(), $options = array()) {
		$gameProperties	= array();
		$ref						= array_flip($ref);
		$select					= $this->_database
			->select()
			->from(
				array('game_properties'),
        array(
					'game_properties.id', 'game_properties.users_id', 'game_properties.modified', 'game_properties.maps_size_x', 'game_properties.maps_size_y'
				)
			);

		// Where
		// -----------------------------------------------------------------------------------
		if(is_array($where) && !empty($where)) {
			foreach($where as $k => $v) {
				$select->where($k, $v);
			}
		}

		// Options
		// -----------------------------------------------------------------------------------
		if(isset($options['limit'])) {
			$select->limit($options['limit'], 0);
		}

		// Datenauswertung
		// -----------------------------------------------------------------------------------
		foreach($this->fetch($select) as $k => $v) {
			
			// User
			// ---------------------------------------------------------------------------------
			$user = new Application_Model_Schema_User();
			$user->setId($v['game_properties']['users_id']);			

			// Game Property
			// ---------------------------------------------------------------------------------
			$gameProperty = new Application_Model_Schema_GameProperty();
			$gameProperty
				->setId($v['game_properties']['id'])
				->setUser($user)
				->setModified($v['game_properties']['modified'])
				->setMapsSizeX($v['game_properties']['maps_size_x'])
				->setMapsSizeY($v['game_properties']['maps_size_y']);
			
			$gameProperties[(int) $v['game_properties']['id']] = $gameProperty;
		}

		return $gameProperties;
	}
}
?>